/**
 * 编写一个带头结点的链表，反向输出该链表中data域的值;
 * 思路:1. 利用栈的FILO原则顺序插入栈中，然后输出栈中的元素;
 *      2. 使用递归实现.
*/

#include <stdio.h>
#include <stdlib.h>

#define bool int
#define true !0
#define false 0

#define StckSize 100

typedef struct LNode{
    int data;
    struct LNode* next;
} LNode, *LinkedList;


//初始化链表
bool init(LinkedList &list);

//插入元素
bool insert(LinkedList &list, int data);

// 逆向打印链表中的元素
void reversePrint(LinkedList& list);

int main()
{
    LinkedList list=NULL;
    init(list);
    for(int i=0;i<=10;i++)
        insert(list, i);

    reversePrint(list);
    return 0;
}


bool init(LinkedList &list)
{
    LNode* node=(LNode* )malloc(sizeof(LNode));
    if(node==NULL) return false;

    node->data=-1;
    node->next=NULL;
    list=node;
    return true;
}

bool insert(LinkedList &list, int data)
{
    LinkedList tmpList=list;
    LNode* newNode=(LNode* )malloc(sizeof(LNode));
    if(newNode==NULL) 
        return false;
    
    newNode->next=NULL;
    newNode->data=data;

    while(tmpList->next!=NULL)
    {
        tmpList=tmpList->next;
    }

    tmpList->next=newNode;
    return true;
}

void reversePrint(LinkedList& list)
{
    if(list->next) reversePrint(list->next);

    printf("%d ", list->data);
}